package com.prs.crm.service.project.impl;

import java.io.File;

import org.courser.ui.PaginationSupport;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;

import com.prs.crm.context.FileUtil;
import com.prs.crm.dao.project.TaskCritiqueDao;
import com.prs.crm.domain.hr.Person;
import com.prs.crm.domain.oa.Notice;
import com.prs.crm.domain.project.Task;
import com.prs.crm.domain.project.TaskCritique;
import com.prs.crm.exception.InValidException;
import com.prs.crm.service.impl.BaseServiceImpl;
import com.prs.crm.service.oa.NoticeService;
import com.prs.crm.service.project.TaskCritiqueService;

public class TaskCritiqueServiceImpl extends BaseServiceImpl<TaskCritique,TaskCritiqueDao> implements TaskCritiqueService{
	
	@Autowired
	private NoticeService noticeService;
	
	public void setNoticeService(NoticeService noticeService) {
		this.noticeService = noticeService;
	}

	public NoticeService getNoticeService() {
		return noticeService;
	}

	public PaginationSupport listMyCritique(PaginationSupport page,Person recorder)
	{
		DetachedCriteria criteria = this.createQuery(TaskCritique.class);
		criteria.add(Restrictions.eq("recorder", recorder));
		return super.listByPage(criteria, page);
	}
	
	public void updateCritique(TaskCritique critique,File upload,String uploadFileName)
	{
		if (critique.getTask().getLocked() )
			throw new InValidException("任务已被锁定,不能点评");
		if (upload!=null)
		{
			critique.setAttach(FileUtil.getInstance().createAttach(upload, uploadFileName));
		}
		super.save(critique);
	}
	
	public void saveCritique(TaskCritique critique,Task task,File attach,String fileName)
	{
		if (task.getLocked() )
			throw new InValidException("任务已被锁定,不能点评");
		if (attach!=null)
		{
			critique.setAttach(FileUtil.getInstance().createAttach(attach, fileName));
		}
		if (critique.getTask()==null)
		{
			critique.setTask(task);
		}
		super.save(critique);
	}
	
	public void removeCritique(Task task,TaskCritique critique,Person currentUser)
	{
		if (critique.getRecorder().getId().equals(currentUser.getId()))
		{
			task.getCritiques().remove(critique);
			super.remove(critique);
		}
	}
	
	/**
	 * 发送点评通知
	 */
	public void sendCritiqueNotice(TaskCritique critique)
	{
		Notice notice = new Notice();
		notice.setTitle("任务:"+critique.getTask().getName()+"有新的点评");
		String content = null;
		if (critique.getRecorder().getResume()!=null)
			notice.setContent(critique.getRecorder().getResume().getName()+"对任务:"+critique.getTask().getName()+"有新的点评,请及时查阅");
		else
			notice.setContent(critique.getRecorder().getLoginCode()+"对任务:"+critique.getTask().getName()+"有新的点评,请及时查阅");
		notice.setContent(content);
		this.getNoticeService().sendNotice(notice, critique.getTask().getExecutor());
	}
}
